package com.linkallcloud.core.service;

import com.linkallcloud.core.domain.TreeDomain;
import com.linkallcloud.core.dto.Sid;
import com.linkallcloud.core.dto.Trace;
import com.linkallcloud.core.dto.Tree;

import java.util.List;

public interface ITreeService<T extends TreeDomain> extends IService<T> {

    /**
     * 获取树节点列表
     *
     * @param t
     * @param valid
     * @return
     */
    List<Tree> getTreeNodes(Trace t, boolean valid);

    /**
     * 获取树
     *
     * @param t
     * @param valid
     * @return
     */
    Tree getTree(Trace t, boolean valid);
    T getDomainTree(Trace t, boolean valid);
    
    /**
     * 获取树的第一级
     * 
     * @param t
     * @param valid
     * @return
     */
    List<T>  loadLevel1DomainTree(Trace t, boolean valid);

    /**
     * 获取节点parent下的一级树节点
     * 
     * @param t
     * @param parent
     * @param valid
     * @return
     */
    List<T> loadDirectDomainTreeNodes(Trace t, Sid parent, boolean valid);

    /**
     * 更新系统编码
     *
     * @param t
     * @param id
     * @param code 系统编码
     * @return
     */
    Boolean updateCode(Trace t, Long id, String code);

    /**
     * @param t
     * @param id
     * @param uuid
     * @param parentClass
     * @return
     */
    T fetchByIdUuidJoinParent(Trace t, Long id, String uuid, String parentClass);

}
